export default {
	// 判断俩个坐标点之间的距离
	getDistance(lat1, lng1, lat2, lng2) {
		let radLat1 = lat1 * Math.PI / 180.0,
			radLat2 = lat2 * Math.PI / 180.0,
			a = radLat1 - radLat2,
			b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0,
			s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(
				Math.sin(b / 2), 2)))
		s = s * 6378.137 // 地球半径  
		s = Math.round(s * 10000) / 10000
		return s
	},

	// 生成uuid
	guid() {
		function S4() {
			return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
		}
		return (S4() + S4() + '' + S4() + '' + S4() + '' + S4() + '' + S4() + S4() + S4())
	},

	// 获取当前的时间并格式化
	getTime() {
		let date = new Date(),
			year = date.getFullYear(),
			month = date.getMonth() + 1,
			day = date.getDate(),
			hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours(),
			minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(),
			second = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
		month >= 1 && month <= 9 ? (month = '0' + month) : ''
		day >= 0 && day <= 9 ? (day = '0' + day) : ''
		let timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second
		return timer
	},

	// js清空特殊字符
	emptySpecial(val) {
		return val.replace(/[`~!@#$%^&*()_\+=<>?:"{}|,.\/;'\\[\]·~！@#￥%……&*（）——\+={}|《》？：“”【】、；‘'，。、]/g, '')
	},

	// 判断是否包含特殊字符
	hasSpecialChar(str) {
		return /[&@*?？]/.test(str);
	},

	// js去除所有空格
	emptySpace(val) {
		return val.replace(/\s*/g, '')
	},

	// 手机号码
	isMobile(s) {
		return /^1[0-9]{10}$/.test(s)
	},

	// 邮箱
	isEmail(s) {
		return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
	},

	// 匹配小数点后两位
	doubleTwoPoint(value) {
		return (/^(\d+\.\d{2})$/).test(value)
	},

	// 验证非零的正整数和两位小数
	numberNoZeroNumberPoint(value) {
		return (/(^\+?[1-9][0-9]*$)|(^(\d+\.\d{2})$)/).test(value)
	},

	// 验证大于等于0的正整数和小数点后最多俩位
	numberCheckPoint(value) {
		return (/(^\+?[0-9][0-9]*$)|(^(\d+\.\d{1,2})$)/).test(value)
	},

	// 验证非零的正整数
	numberNoZeroPosiReg(value) {
		return (/^\+?[1-9][0-9]*$/).test(value)
	},

	// 大于等于0的正整数,不允许小数
	numberCheck(value) {
		return (/^\+?[0-9][0-9]*$/).test(value)
	},

	// 电话号码
	isPhone(s) {
		return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
	},

	// 严格的身份证校验
	IDCardCheck(num) {
		num = num.toUpperCase()
		//身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。   
		if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
			// console.log('输入的身份证号长度不对，或者号码不符合规定！\n15位号码应全为数字，18位号码末位可以为数字或X。')
			return false
		}
		//校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
		//下面分别分析出生日期和校验位 
		let len, re
		len = num.length
		if (len === 15) {
			re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/)
			let arrSplit = num.match(re)

			//检查生日日期是否正确 
			let dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
			let bGoodDay
			bGoodDay = (dtmBirth.getYear() === Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) === Number(arrSplit[
				3])) && (
				dtmBirth.getDate() === Number(arrSplit[4]))
			if (!bGoodDay) {
				// console.log('输入的身份证号里出生日期不对！')
				return false
			} else {
				//将15位身份证转成18位 
				//校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
				let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
				let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
				let nTemp = 0,
					i
				num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6)
				for (i = 0; i < 17; i++) {
					nTemp += num.substr(i, 1) * arrInt[i]
				}
				num += arrCh[nTemp % 11]
				return true
			}
		}
		if (len === 18) {
			re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
			let arrSplit = num.match(re)

			//检查生日日期是否正确 
			let dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
			let bGoodDay
			bGoodDay = (dtmBirth.getFullYear() === Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) === Number(
					arrSplit[
						3])) &&
				(dtmBirth.getDate() === Number(arrSplit[4]))
			if (!bGoodDay) {
				// alert(dtmBirth.getYear());
				//  alert(arrSplit[2]);
				// console.log('输入的身份证号里出生日期不对！')
				return false
			} else {
				//检验18位身份证的校验码是否正确。 
				//校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
				let valnum
				let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
				let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
				let nTemp = 0,
					i
				for (i = 0; i < 17; i++) {
					nTemp += num.substr(i, 1) * arrInt[i]
				}
				valnum = arrCh[nTemp % 11]
				if (valnum !== num.substr(17, 1)) {
					// console.log('18位身份证的校验码不正确！') //应该为： + valnum
					return false
				}
				return true
			}
		}
		return false
	},
}